<!DOCTYPE html>
  <html>
    <head>
      <title>vscode配置</title>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      
      <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.9.0/katex.min.css">
      
      
      
      
      
      
      
      
      
      

      <style> 
      pre {
  font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;
  direction: ltr;
  text-align: left;
  white-space: pre;
  word-spacing: normal;
  word-break: normal;
  padding: 1em;
  margin: .5em 0;
  overflow: auto;
  line-height: 1.5;
  tab-size: 4;
  hyphens: none;
  color: #EEFFFF;
  background-color: #2e3d44 !important;
  border: #475d69;
  border-radius: 3px;
}
pre[class*="language-"] {
  padding: 1em;
}
code[class*="language-"],
pre[class*="language-"] {
  /*
&.line-numbers {
  .line-numbers-rows>span:before {
  }
}
*/
}
code[class*="language-"] .token.comment,
pre[class*="language-"] .token.comment,
code[class*="language-"] .token.prolog,
pre[class*="language-"] .token.prolog,
code[class*="language-"] .token.doctype,
pre[class*="language-"] .token.doctype,
code[class*="language-"] .token.cdata,
pre[class*="language-"] .token.cdata {
  color: #4f6875;
}
code[class*="language-"] .token.punctuation,
pre[class*="language-"] .token.punctuation {
  color: #82AAFF;
}
code[class*="language-"] .namespace,
pre[class*="language-"] .namespace {
  opacity: .7;
}
code[class*="language-"] .token.constant,
pre[class*="language-"] .token.constant {
  color: #F07178;
}
code[class*="language-"] .token.property,
pre[class*="language-"] .token.property {
  color: #73d1c8;
}
code[class*="language-"] .token.boolean,
pre[class*="language-"] .token.boolean,
code[class*="language-"] .token.number,
pre[class*="language-"] .token.number,
code[class*="language-"] .token.function-name,
pre[class*="language-"] .token.function-name {
  color: #F78C6A;
}
code[class*="language-"] .token.tag,
pre[class*="language-"] .token.tag {
  color: #F07178;
}
code[class*="language-"] .token.deleted,
pre[class*="language-"] .token.deleted {
  color: #F07178;
}
code[class*="language-"] .token.symbol,
pre[class*="language-"] .token.symbol {
  color: #C3E88D;
}
code[class*="language-"] .token.selector,
pre[class*="language-"] .token.selector {
  color: #C792EA;
}
code[class*="language-"] .token.attr-name,
pre[class*="language-"] .token.attr-name {
  color: #C792EA;
}
code[class*="language-"] .token.string,
pre[class*="language-"] .token.string {
  color: #C3E88D;
}
code[class*="language-"] .token.char,
pre[class*="language-"] .token.char {
  color: #373b41;
}
code[class*="language-"] .token.builtin,
pre[class*="language-"] .token.builtin,
code[class*="language-"] .token.inserted,
pre[class*="language-"] .token.inserted {
  color: #C3E88D;
}
code[class*="language-"] .token.entity,
pre[class*="language-"] .token.entity {
  color: #89DDF3;
}
code[class*="language-"] .token.url,
pre[class*="language-"] .token.url {
  color: #FFCB6B;
}
code[class*="language-"] .token.operator,
pre[class*="language-"] .token.operator {
  color: #89DDF3;
}
code[class*="language-"] .token.atrule,
pre[class*="language-"] .token.atrule,
code[class*="language-"] .token.attr-value,
pre[class*="language-"] .token.attr-value,
code[class*="language-"] .token.keyword,
pre[class*="language-"] .token.keyword {
  color: #C792EA;
}
code[class*="language-"] .token.function,
pre[class*="language-"] .token.function {
  color: #82AAFF;
}
code[class*="language-"] .token.class-name,
pre[class*="language-"] .token.class-name {
  color: #FFCB6B;
}
code[class*="language-"] .token.regex,
pre[class*="language-"] .token.regex,
code[class*="language-"] .token.important,
pre[class*="language-"] .token.important,
code[class*="language-"] .token.variable,
pre[class*="language-"] .token.variable {
  color: #89DDF3;
}
code[class*="language-"] .token.important,
pre[class*="language-"] .token.important,
code[class*="language-"] .token.bold,
pre[class*="language-"] .token.bold {
  font-weight: bold;
}
code[class*="language-"] .token.italic,
pre[class*="language-"] .token.italic {
  font-style: italic;
}
code[class*="language-"] .token.entity,
pre[class*="language-"] .token.entity {
  cursor: help;
}
html body{font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#EEFFFF;background-color:#263238;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body>:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#fff}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#9cffff}html body strong{color:#fff}html body del{color:#9cffff}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#82AAFF;text-decoration:none}html body a:hover{color:#abc6ff;text-decoration:none}html body img{max-width:100%}html body>p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body>ul,html body>ol{margin-bottom:16px}html body ul,html body ol{padding-left:2em}html body ul.no-list,html body ol.no-list{padding:0;list-style-type:none}html body ul ul,html body ul ol,html body ol ol,html body ol ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li>p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#9cffff;border-left:4px solid #475d69}html body blockquote>:first-child{margin-top:0}html body blockquote>:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#475d69;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:bold;color:#fff}html body table td,html body table th{border:1px solid #475d69;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:bold}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em !important;color:#fff;background-color:#364850;border-radius:3px;padding:.2em 0}html body code::before,html body code::after{letter-spacing:-0.2em;content:"\00a0"}html body pre>code{padding:0;margin:0;font-size:.85em !important;word-break:normal;white-space:pre;background:transparent;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;font-size:.85em !important;line-height:1.45;border:#475d69;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:before,html body pre tt:before,html body pre code:after,html body pre tt:after{content:normal}html body p,html body blockquote,html body ul,html body ol,html body dl,html body pre{margin-top:0;margin-bottom:16px}html body kbd{color:#fff;border:1px solid #475d69;border-bottom:2px solid #3b4d56;padding:2px 4px;background-color:#364850;border-radius:3px}@media print{html body{background-color:#263238}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#fff;page-break-after:avoid}html body blockquote{color:#9cffff}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body pre,html body code{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for="preview"]) .code-chunk .btn-group{display:none}.markdown-preview:not([for="preview"]) .code-chunk .status{display:none}.markdown-preview:not([for="preview"]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px)}}@media screen and (max-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
 
      </style>
    </head>
    <body for="html-export">
      <div class="mume markdown-preview   ">
      <h1 class="mume-header" id="go%E8%AF%AD%E8%A8%80%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AEvscode">Go语言开发环境配置(VSCode)</h1>

<p>配置Go语言时遇到一些坑，特别是VSCode中Go工具<strong>包的安装</strong>及相关的<strong>科学上网</strong>知识，查了很多资料都描述不清晰，可能是我认为是难点的内容在别人那里是不需要说明的基础吧。</p>
<p>其实只要科学上网配置完成，VSCode中安装工具包超级简单，对，是超级简单。好像本文标题不对？应该叫“Go语言工具包安装”？好吧，我在这里是把Go的环境变量等配置当作不需要说明的基础了，那些东东网上很多，我在本文略过了:)</p>
<h4 class="mume-header" id="%E5%AE%89%E8%A3%85go">安装go</h4>

<p>略</p>
<h4 class="mume-header" id="%E5%AE%89%E8%A3%85git">安装git</h4>

<p>略</p>
<h4 class="mume-header" id="vs-code%E9%85%8D%E7%BD%AE">VS Code配置</h4>

<ul>
<li>
<p>1.安装go扩展<br>
在vscode扩展中搜“go”,选择microsoft官方的ms-vscode.go</p>
</li>
<li>
<p>2.安装相关工具包</p>
<ul>
<li>通过VSCode安装<br>
操作很简单，但需要科学上网（见下面第4条）
<ul>
<li>
<p>1)Ctrl + Shift + P</p>
</li>
<li>
<p>2)输入<code>Go: install/update tools</code></p>
</li>
<li>
<p>3)All Select,确定</p>
</li>
<li>
<p>4)部分工具需要科学上网。注意为VSCode设置[用户设置]http代理:<br>
此处以SSR为例，请先安装并完成SSR客户端配置</p>
<ul>
<li>4.1) windows下先启动SSR客户端，再对VSCode设置：</li>
</ul>
<pre data-role="codeBlock" data-info="json" class="language-json"><span class="token property">"http.proxy"</span><span class="token operator">:</span> <span class="token string">"127.0.0.1:1080"</span><span class="token punctuation">,</span>  
</pre><ul>
<li>4.2) linux下需要<a href="https://www.cnblogs.com/liuxuzzz/p/5324749.html">使用privoxy</a>一类的工具，安装配置好privoxy之后，再设置VSCode</li>
</ul>
<pre data-role="codeBlock" data-info="json" class="language-json"><span class="token property">"http.proxy"</span><span class="token operator">:</span> <span class="token string">"http://localhost:8118/"</span><span class="token punctuation">,</span>  
</pre><pre data-role="codeBlock" data-info="javascript" class="language-javascript"><span class="token keyword">if</span> <span class="token punctuation">(</span>a <span class="token operator">==</span> b<span class="token punctuation">)</span> <span class="token punctuation">{</span>
  	   <span class="token keyword">var</span> c <span class="token operator">=</span> <span class="token string">"21"</span><span class="token punctuation">;</span>
  	<span class="token punctuation">}</span>
</pre><pre data-role="codeBlock" data-info="go" class="language-go"><span class="token keyword">if</span> a <span class="token operator">==</span> b <span class="token punctuation">{</span>
  	   <span class="token keyword">var</span> c <span class="token operator">=</span> <span class="token string">"21"</span><span class="token punctuation">;</span>
  	<span class="token punctuation">}</span>
</pre><p>注：因为要跑本地服务，因此需要去掉Privoxy/config中<code># forward localhost/ .</code>注释</p>
<pre data-role="codeBlock" data-info="shell" class="language-shell">forward           localhost/     <span class="token keyword">.</span>  
</pre></li>
</ul>
</li>
<li>手动安装
<ul>
<li>使用go get，例如：<pre data-role="codeBlock" data-info="shell" class="language-shell">go get -u github.com/gin-gonic/gin  
</pre>部分包需要科学上网，可参考前面科学上网说明</li>
<li>不想翻墙的安装方法<pre data-role="codeBlock" data-info="shell" class="language-shell"><span class="token comment"># 注意，github下golang/镜像中的包需要放到golang.org/x目录下  </span>
<span class="token function">git</span> clone https://github.com/golang/net.git <span class="token variable">$GOPATH</span>/src/golang.org/x/net  
<span class="token function">git</span> clone https://github.com/golang/sys.git <span class="token variable">$GOPATH</span>/src/golang.org/x/sys  
<span class="token function">git</span> clone https://github.com/golang/tools.git <span class="token variable">$GOPATH</span>/src/golang.org/x/tools  
</pre></li>
</ul>
</li>
</ul>
</li>
<li>
<p>3.配置</p>
<ul>
<li>设置toolsGopath(原因参考<a href="https://blog.csdn.net/ys5773477/article/details/78881841">vscode golang详细配置</a>中的【<strong>注：坑点</strong>】)<br>
在VSCode[用户设置]中添加：<pre data-role="codeBlock" data-info="json" class="language-json"><span class="token property">"go.toolsGopath"</span><span class="token operator">:</span> <span class="token string">"F:\\SourceCode\\go"</span><span class="token punctuation">,</span>  
</pre></li>
<li>debug配置<br>
使用默认配置<br>
debug配置的更多信息，参考官方Wiki： <a href="https://github.com/Microsoft/vscode-go/wiki/Debugging-Go-code-using-VS-Code">Debugging Go code using VS Code</a></li>
</ul>
</li>
</ul>

      </div>
      <div class="md-sidebar-toc"><ul>
<li><a href="#go%E8%AF%AD%E8%A8%80%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AEvscode">Go语言开发环境配置(VSCode)</a><br>
* <a href="#%E5%AE%89%E8%A3%85go">安装go</a><br>
* <a href="#%E5%AE%89%E8%A3%85git">安装git</a><br>
* <a href="#vs-code%E9%85%8D%E7%BD%AE">VS Code配置</a></li>
</ul>
</div>
      <a id="sidebar-toc-btn">≡</a>
    </body>
    
    
    
    
    
    
    
<script>

var sidebarTOCBtn = document.getElementById('sidebar-toc-btn')
sidebarTOCBtn.addEventListener('click', function(event) {
  event.stopPropagation()
  if (document.body.hasAttribute('html-show-sidebar-toc')) {
    document.body.removeAttribute('html-show-sidebar-toc')
  } else {
    document.body.setAttribute('html-show-sidebar-toc', true)
  }
})
</script>
      
  </html>